package fwmpc.exception;

import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Optional;

/**
 * 类描述: 自定义异常
 *
 * @author : 王雷
 * @date : 2021/4/22 0022 上午 9:41
 */
@Data
@EqualsAndHashCode(callSuper = true, of = {"errorCode"})
public class WeiXinRuntimeException extends RuntimeException {
    private static final long serialVersionUID = 4889111473500139609L;
    /**
     * 错误编码
     */
    private Integer errorCode = 200;

    /**
     * 错误说明
     */
    private String errorMessage = "";

    /**
     * 错误信息
     */
    private String content = "";

    /**
     * 自定义异常.
     *
     * @param errorCode 错误编码
     * @param message   信息描述
     */
    public WeiXinRuntimeException(Integer errorCode, String message) {
        super((message == null) ? "" : message);
        this.errorCode = errorCode;
        this.errorMessage = message;
    }

    /**
     * 自定义异常.
     *
     * @param errorCode 错误编码
     * @param message   信息描述
     * @param content   错误信息
     */
    public WeiXinRuntimeException(Integer errorCode, String message, String content) {
        super(((message == null) ? "" : message) + "-" + ((content == null) ? "" : content));
        this.errorCode = errorCode;
        this.errorMessage = message;
        this.content = content;
    }

    /**
     * 自定义异常.
     *
     * @param weixinStatusCodeEnum 异常枚举类型
     * @param content              错误信息
     */
    public WeiXinRuntimeException(WeixinStatusCodeEnum weixinStatusCodeEnum, String content) {
        super(content);
        weixinStatusCodeEnum = Optional.ofNullable(weixinStatusCodeEnum).orElse(WeixinStatusCodeEnum.Code_500);
        this.errorCode = weixinStatusCodeEnum.getContent();
        this.errorMessage = weixinStatusCodeEnum.getContentName();
        this.content = content;
    }

    /**
     * 自定义异常.
     *
     * @param errorCode 错误编码
     * @param message   信息描述
     */
    public WeiXinRuntimeException(Integer errorCode, String message, Throwable cause) {
        super(message, cause);
        this.errorCode = errorCode;
        this.errorMessage = message;
    }

    /**
     * 自定义异常.
     *
     * @param errorCode 错误编码
     * @param message   信息描述
     * @param content   错误信息
     */
    public WeiXinRuntimeException(Integer errorCode, String message, String content, Throwable cause) {
        super(((message == null) ? "" : message) + "-" + ((content == null) ? "" : content), cause);
        this.errorCode = errorCode;
        this.errorMessage = message;
        this.content = content;
    }

    /**
     * 错误信息综合描述
     *
     * @author 王雷    (2018年4月12日 下午4:30:20)
     */
    public String contentMessage() {
        return this.errorMessage + this.content;
    }

}
